package main

/*
* Content: math中的方法、正无穷负无穷、math/rand随机数
* --------------------------------------------------
* Go语言 中常用math函数列表: https://blog.csdn.net/jacky128256/article/details/119210573
* Go语言 rand(随机数)包: https://blog.csdn.net/boysoft2002/article/details/126337102
 */

import (
	"fmt"
	"math"
	"math/rand"
	"time"
)

func MyBagMathAndRand() {

	// math中的方法
	fmt.Println("--------------------math中的方法--------------------")
	// 传入的参数几乎全是 float64类型

	var myInt1 float64 = 27
	var myInt2 float64 = 64

	// 绝对值函数
	myAbs := math.Abs(myInt1)
	fmt.Printf("math.Abs(myInt1): %v\n", myAbs)

	// 取大值
	myMax := math.Max(myInt1, myInt2)
	fmt.Printf("math.Max(myInt1, myInt2): %v\n", myMax)

	// 取小值
	myMin := math.Min(myInt1, myInt2)
	fmt.Printf("math.Min(myInt1, myInt2): %v\n", myMin)

	// 向上取整
	myCeil := math.Ceil(myInt1)
	fmt.Printf("math.Ceil(myInt1): %v\n", myCeil)

	// 向下取整
	myFloor := math.Floor(myInt1)
	fmt.Printf("math.Floor(myInt1): %v\n", myFloor)

	// 平方根函数 Sqrt(x float64)
	mySqrt := math.Sqrt(myInt2)
	fmt.Printf("math.Sqrt(myInt2): %v\n", mySqrt)

	// 立方根函数 Cbrt(x float64)
	myCbrt := math.Cbrt(myInt1)
	fmt.Printf("math.Cbrt(myInt1): %v\n", myCbrt)

	// x 的幂函数 Pow(x, y float64)
	myPow := math.Pow(myInt2, float64(2))
	fmt.Printf("Pow(myInt2, 2): %v\n", myPow)

	// 对数函数
	myLog := math.Log(myInt1)
	fmt.Printf("math.Log(myInt1): %v\n", myLog)

	// 10 为底的对数函数
	myLog10 := math.Log10(myInt1)
	fmt.Printf("math.Log10(myInt1): %v\n", myLog10)

	// 2 为底的对数函数
	myLog2 := math.Log2(myInt1)
	fmt.Printf("math.Log2(myInt1): %v\n", myLog2)

	// 正无穷负无穷
	fmt.Println("--------------------正无穷负无穷--------------------")

	ttt1 := math.MaxInt64
	ttt2 := math.MinInt64
	fmt.Printf("正无穷: %v, 负无穷: %v\n", ttt1, ttt2)

	// math/rand随机数
	fmt.Println("--------------------math/rand随机数--------------------")

	// 指定随机数种子
	rand.Seed(time.Now().UnixNano())

	// rand.Int(): 返回一个随机整数
	myRandInt := rand.Int()
	fmt.Printf("rand.Int(): %v\n", myRandInt)

	// rand.Intn(): 返回一个 0~n 间不包括 n 的非负整数
	myRandIntn := rand.Intn(819)
	fmt.Printf("rand.Intn(819): %v\n", myRandIntn)

	// rand.Int31n()
	myRandInt31n := rand.Int31n(819)
	fmt.Printf("rand.Int31n(819): %v\n", myRandInt31n)

	// rand.Int63n()
	myRandInt63n := rand.Int63n(819)
	fmt.Printf("rand.Int63n(819): %v\n", myRandInt63n)

	// rand.Uint32()
	myRandUint32 := rand.Uint32()
	fmt.Printf("rand.Uint32(): %v\n", myRandUint32)

	// rand.Float32()
	myRandFloat32 := rand.Float32()
	fmt.Printf("rand.Float32(): %v\n", myRandFloat32)

	// rand.Float64()
	myRandFloat64 := rand.Float64()
	fmt.Printf("rand.Float64(): %v\n", myRandFloat64)

}
